"""
数据库连接工具类
# """
from operator import ge
import pymysql
import psycopg2
#pip install DBUtils
from dbutils.pooled_db import PooledDB,SharedDBConnection
# from dbutils.persistent_db import PersistentDB,PersistentDBError,NotSupportedError
class Db_Pool_Utils():
    def __init__(self,database_type=None,db_config:dict=None) -> None:
        self._database_type=database_type
        self._db_config=db_config
    def get_db_pool(self):
        if self._database_type==pymysql:
                poolDB = PooledDB(
                    # 指定数据库连接驱动
                    # creator=pymysql,
                    creator=self._database_type,
                    # 连接池允许的最大连接数,0和None表示没有限制
                    maxconnections=5,
                    # 初始化时,连接池至少创建的空闲连接,0表示不创建
                    mincached=5,
                    # 连接池中空闲的最多连接数,0和None表示没有限制
                    maxcached=5,
                    # 连接池中最多共享的连接数量,0和None表示全部共享(其实没什么卵用)
                    maxshared=5,
                    # 连接池中如果没有可用共享连接后,是否阻塞等待,True表示等等,
                    # False表示不等待然后报错
                    blocking=True,
                    # 开始会话前执行的命令列表
                    setsession=[],
                    # ping Mysql服务器检查服务是否可用
                    ping=0,
                    # 一个连接最大复用次数,0或者None表示没有限制,默认为0
                    maxusage=1000,
                    # **config
                    **(self._db_config)
                )
        elif self._database_type == psycopg2:
            poolDB = PooledDB(
                    # 指定数据库连接驱动
                    # creator=pymysql,
                    creator=self._database_type,
                    # 连接池允许的最大连接数,0和None表示没有限制
                    maxconnections=5,
                    # 初始化时,连接池至少创建的空闲连接,0表示不创建
                    mincached=5,
                    # 连接池中空闲的最多连接数,0和None表示没有限制
                    maxcached=5,
                    # 连接池中最多共享的连接数量,0和None表示全部共享(其实没什么卵用)
                    maxshared=5,
                    # 连接池中如果没有可用共享连接后,是否阻塞等待,True表示等等,
                    # False表示不等待然后报错
                    blocking=True,
                    # 开始会话前执行的命令列表
                    setsession=[],
                    # ping Mysql服务器检查服务是否可用
                    ping=0,
                    # 一个连接最大复用次数,0或者None表示没有限制,默认为0
                    maxusage=1000,
                    # **config
                    **(self._db_config)
                )
        else:
            raise Exception('不支持的数据库类型，仅仅支持mysql和pgsql')
        return poolDB


